package com.hongyi.service.Impl;


import cn.hutool.core.collection.CollectionUtil;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.hongyi.dto.SiteDto;
import com.hongyi.mapper.SiteMapper;
import com.hongyi.pojo.Site;
import com.hongyi.service.SiteService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;

@Service
public class SiteServiceImpl implements SiteService {

    @Autowired
    private SiteMapper siteMapper;


    @Override
    public List<SiteDto> queryAll() {
        //  定义一个集合来装返回结果
        List<SiteDto> datas = new ArrayList<>();
        // 获取所有数据
        List<Site> sites = siteMapper.queryAll();
        // 判断是否为空
        if (sites != null && sites.size() > 0) {
            // 把这这些数据放在一个集合中 这个集合就是我们需要的数据
            List<SiteDto> siteDtos = new ArrayList<>();
            for (Site site : sites) {
                SiteDto siteDto = new SiteDto();
                BeanUtils.copyProperties(site, siteDto);
                siteDto.setCreatedTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(site.getCreatedTime()));
                siteDto.setUpdatedTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(site.getUpdatedTime()));
                siteDtos.add(siteDto);
            }
            // 获取所有子节点
            for (SiteDto siteDto : siteDtos) {
                // 获取子节点
                List<SiteDto> children = getChrildren(siteDto.getId(), siteDtos);
                // 设置子节点 如果为空的是时候 设置为null
                siteDto.setSiteDtoList(CollectionUtils.isNotEmpty(children) ? children : null);
            }

            // 返回数据 寻找父节点
            for (SiteDto siteDto : siteDtos) {
                if (siteDto.getPid().equals(0L)) { // 如果父节点id为0 说明是顶级节点
                    datas.add(siteDto);
                }
            }
        }
        return datas;
    }

    public static List<SiteDto> getChrildren(Long id, List<SiteDto> list) {
        // 定义一个返回集合
        List<SiteDto> chrildrenList = new ArrayList<>();
        for (SiteDto siteDto : list) {
            if (siteDto.getPid().equals(id)) {
                chrildrenList.add(siteDto);
            }
        }
        return chrildrenList;

    }
}
